// default Task
/* function defaultTask(cb) {
    // place code for your default task here
    console.log('run default Task!');
    cb();
}

exports.default = defaultTask; */


/**
 * 导出任务 tasks  private and public 
 */
/* const { series } = require('gulp');

// `clean` 函数并未被导出（export），因此被认为是私有任务（private task）。
// 它仍然可以被用在 `series()` 组合中。
function clean(cb) {
    // body omitted
    console.log('clean');
    cb();
}

// `build` 函数被导出（export）了，因此它是一个公开任务（public task），并且可以被 `gulp` 命令直接调用。
// 它也仍然可以被用在 `series()` 组合中。
function build(cb) {
    // body omitted
    console.log('build');
    cb();
}

exports.build = build;
exports.default = series(clean, build); */



/**
 * 组合任务:同步 series
 */

/* const { series } = require('gulp');

function transpile(cb) {
    // body omitted
    console.log('transpile');
    cb();
}

function bundle(cb) {
    // body omitted
    console.log('bundle');
    cb();
}

exports.build = series(transpile, bundle);
exports.default = bundle; */


/**
 * 组合操作：异步parallel
 */
/* const { parallel } = require('gulp');

function javascript(cb) {
    // body omitted
    console.log('javascript');
    cb();
}

function css(cb) {
    // body omitted
    console.log('css');
    cb();
}

exports.build = parallel(javascript, css); */


/**
 * 
 */
/* const { series } = require('gulp');

function minify(cb) {
    // body omitted
    console.log('minify');
    cb();
}


function transpile(cb) {
    // body omitted
    console.log('transpile');
    cb();
}

function livereload(cb) {
    // body omitted
    console.log('minify');
    cb();
}
//  set NODE_ENV=production
if (process.env.NODE_ENV === 'production') {
    exports.build = series(transpile, minify);
} else {
    exports.build = series(transpile, livereload);
} */


const { src, dest, parallel } = require('gulp');
const pug = require('gulp-pug');
const less = require('gulp-less');
const minifyCSS = require('gulp-csso');
const concat = require('gulp-concat');
const { devFiles } = require('./build/dev');

function html() {
    return src('src/pug/*.pug')
        .pipe(pug())
        .pipe(dest('dist/html'))
}

function css() {
    return src('src/less/*.less')
        .pipe(less())
        .pipe(minifyCSS())
        .pipe(dest('dist/css'))
}

function js() {
    return src('src/js/*.js', { sourcemaps: true })
        .pipe(concat('app.min.js'))
        .pipe(dest('dist/js', { sourcemaps: true }))
}

function dev() {
    return src(devFiles, { sourcemaps: true })
        .pipe(concat('say.min.js'))
        .pipe(dest('dist/js', { sourcemaps: true }))
}

exports.js = js;
exports.css = css;
exports.html = html;
exports.dev = dev;
exports.default = parallel(html, css, js, dev);